home *** CD-ROM | disk | FTP | other *** search
/ MacFormat 1997 February / macformat-047.iso / Shareware Plus / Developers / DLOGManager 1.02 / Source Code / LeggiFilm3rd_v07b2.cp < prev    next >
Encoding:
Text File  |  1996-09-23  |  12.4 KB  |  468 lines  |  [TEXT/KAHL]

  1. /*** File: "LeggiFilm_v05.c"
  2. *
  3. *    Versione 04. Del 16-09-94.
  4. *    Scritto da Cadili Francesco.
  5. *
  6. *    Legge i dati relativi ad un film da DB.
  7. *    Per evitare casini ogni volta che lavoro con copie settarle a NULL
  8. *    quando non sono più valide !!!!!!
  9. *
  10. *    La versione 05 aggiunge gli equivalent da tastiera.
  11. *
  12. *    Devo gestire il bottone di default che cambia e le freccie ....
  13. *
  14. **************************************************************************/
  15. #include <QuickDraw.h>
  16. #ifndef XTENSION            // Francesco 11-11-94
  17.     extern Cursor iBeam;
  18. #endif
  19. #include <Menus.h>
  20. #include <Events.h>
  21. #include "LeggiFilm_v04.h"
  22. #define newVersion
  23.  
  24. /******** Dichiarazioni private ************************/
  25. /******** Include locali *******************************/
  26.  
  27. #include "stringUtility_v02.h"
  28. #include "StrUtilities.h"
  29. #include "Error.h"                    // usato per gestire gli errori
  30. #include "FirstWConst.h"
  31. #include "Cstring_P_v32.h"
  32. #define POPUPTIPO
  33. #ifdef newVersion
  34. #include "CgestisciDLOGDati_v01.h"
  35. #include "CgestisciElOrd_v03.h"
  36. #endif
  37. /******** Fine Include locali **************************/
  38. /******** Costanti locali ******************************/
  39.  
  40. #define kStdFont    systemFont
  41. #define kStdHeight    12
  42. #define kTextFont    geneva
  43. #define kTextHeight    12                // text Height
  44. #define kIntestHeight 9
  45. #ifdef POPUPTIPO
  46. #define kPopUpTipoID 10150
  47. #endif
  48. #define noTitle            -1
  49. #define    ours(w)            (w == (*data)->theDialog)
  50. #define kEquiNuovoDato 'N'
  51.  
  52. #define kEnterKey    0x3
  53. #define kReturnKey    0xD
  54. #define kEscKey        0x1B
  55. #define kTabKey        '\t'
  56. #pragma segment LeggiFilm
  57. /******** Fine Costanti locali *************************/
  58. /******** Strutture dati locali ************************/
  59.  
  60. typedef long **longHandle;
  61. typedef char **charHandle;
  62. typedef struct
  63. {
  64.     short itemNum;                // numero di item;
  65.     TEHandle listaNomi;            // gestisce la scelta del titolo;
  66.     longHandle posPrimoCar;        // la posizione del primo carattere di ogni linea in listaNomi;
  67. } campoScroll;
  68. typedef struct
  69. {
  70.     DialogPtr            theDialog;    // il puntatore ai dati del DLOG;
  71.     CgestisciDLOGDati    *DLOGdesc;    // i dati del dialog
  72.     long                 numeroTit;    // il numero dei titoli;
  73.     CPushButton            *actDefaultButton;
  74.     CDefPushButton        *ricerca;
  75. } leggiFilmRec;
  76. typedef leggiFilmRec *leggiFilmPtr, **leggiFilmHdl;
  77.  
  78. static leggiFilmHdl data = NULL;
  79.  
  80. /********* Fine Strutture dati locali *******************/
  81. /******** Funzioni private: ****************************/
  82.  
  83. int InitData_LeggiFilm(void);
  84. void azzeraDati_LeggiFilm(void);
  85. void disegnaTitoli_LeggiFilm(PtrDescrTitolo ptrElTitol);
  86. long calcolaCarTitoli(HdlDescrTitolo elencoTitoli, short numeroTit);
  87.  
  88. int aggiungiPStrInArray(unsigned char *pascalStr, long *inizio, char *str);
  89. void mostaQueryTesto(void);
  90. void aggiornaBottoneRicerca(void);
  91. void disattivaTestoInput(void);
  92. void MaintainCursor2(Cursor *editCursor);
  93. void mostaTesto3(void);
  94.  
  95. int AdjustText (void);
  96. pascal void ScrollProc(ControlHandle theControl, int theCode);
  97. void activeTextEdit_ListaFilm(short itemHit);
  98. void initTextData_ListaFilm(short itemHit);
  99.  
  100. void ClickInScroll_ListaFilm(EventRecord *theEvent);
  101. void incNomeSel(short offSet);
  102. void ClickInListaNomi(EventRecord *theEvent);
  103. void selectTitolo(short titoloScelto);
  104.  
  105. /******** Fine Funzioni private ************************/
  106. /******** Fine Dichiarazioni private ********************/
  107.  
  108. /*** funzione: "Alloca_LeggiFilm"
  109. *
  110. *    Val OUTPUT:    true se tutto ok, false altrimenti.
  111. *********************************************************/
  112. int            Alloca_LeggiFilm(DialogPtr    theDialog)
  113. {
  114.     short result = true;
  115.  
  116.     if(theDialog == NULL)
  117.         return(false);
  118.         
  119.     data = (leggiFilmHdl)NewHandle(sizeof(leggiFilmRec));
  120.     if (data != NULL) {
  121.         azzeraDati_LeggiFilm();
  122.         (*data)->theDialog = theDialog;
  123.         result = InitData_LeggiFilm();
  124.     } else {                    // errore in memoria
  125.         SetErrorData(kErrMemoria, 0, "Alloca_LeggiFilm", "allocazione della struttura dati principale", "Errore in memoria");
  126.         result = false;
  127.     }
  128.     
  129.     if (!result)
  130.         Dealloca_LeggiFilm();
  131.     return(result);
  132. }
  133.  
  134. /*** funzione: "Dealloca_LeggiFilm"
  135. *
  136. *    Nota: (bisogna cancellare i CTRL)
  137. *
  138. ***************************************/
  139. void Dealloca_LeggiFilm(void)
  140. {
  141.     if (data != NULL)
  142.     {
  143.  
  144.         delete (**data).DLOGdesc;
  145.         DisposHandle((Handle)data);
  146.     }
  147.     data = NULL;
  148. }
  149.  
  150. /*** Procedura: "azzeraDati_LeggiFilm()"
  151. *
  152. *    Azzera la struttura dati (presuppone data != NULL).
  153. *********************************************************/
  154. void azzeraDati_LeggiFilm(void)
  155. {
  156. }
  157.  
  158. /*** Procedura: "InitData_LeggiFilm()"
  159. *
  160. *    Inizializza i dati relativi al DLOG.
  161. *    Alloca i campi "posPrimoCar", "listaNomi".
  162. *
  163. *    Val OUTPUT:    true se tutto ok, false altrimenti.
  164. ***********************************************/
  165. int InitData_LeggiFilm(void)
  166. {
  167.     DialogPtr theDialog = (*data)->theDialog;
  168.  
  169.     if (theDialog == NULL)
  170.         return(false);
  171.     (**data).DLOGdesc = new CgestisciDLOGDati;
  172.     if ((**data).DLOGdesc == NULL || (**data).DLOGdesc->IgestisciDLOGDati(theDialog, 129))
  173.     {
  174.         SetErrorData(kErrRisorse, 0, "Alloca_visualizza", "durante la strutturazione della finestra", "Errore in memoria");
  175.         return(false);
  176.     }
  177.  
  178.     /* mette a posto i bottoni */
  179.     (**data).actDefaultButton = new CPushButton;
  180.     (**data).actDefaultButton->IPushButton(theDialog, ok);
  181.     (**data).ricerca = new CDefPushButton;
  182.     (**data).actDefaultButton->IPushButton(theDialog, w1ricerca);
  183.     return(true);
  184. }
  185.  
  186. int AdjustText (void)
  187. {
  188.     return(0);
  189. }
  190.  
  191. pascal void ScrollProc (ControlHandle theControl, int theCode)
  192. {
  193. }
  194.  
  195. /*** Procedura "mostaQueryTesto()"
  196. *
  197. *    Mosta la parte attuale del campo
  198. ***********************************************/
  199. void mostaQueryTesto(void)
  200. {
  201. }
  202.  
  203. /*** Procedura: "ClickInRicerca()"
  204. *
  205. *    Gestisce il click sul bottone ricerca.
  206. *
  207. *    Val OUTPUT:    true se tutto ok, false altrimenti.
  208. *********************************************************/
  209. int ClickInRicerca(void)
  210. {
  211.     short result = true;
  212.     Cstring_P dataStr[3];
  213.  
  214.     (**data).DLOGdesc->cancellaTesto(w1inListaNomi);
  215.     dataStr[0].Istring_P();
  216.     dataStr[0].Ctransfer("Il grande gueriero");
  217.     dataStr[1].Istring_P();
  218.     dataStr[1].Ctransfer("Il grande regista");
  219.     dataStr[2].Istring_P();
  220.     dataStr[2].Ctransfer("1995");
  221.     (**data).DLOGdesc->aggiungiTesto(w1inListaNomi, 3, dataStr);
  222.     dataStr[0].Ctransfer("Il grande gueriero ancora più grande");
  223.     dataStr[1].Ctransfer("Il grande regista (sempre er più)");
  224.     dataStr[2].Ctransfer("1995");
  225.     (**data).DLOGdesc->aggiungiTesto(w1inListaNomi, 3, dataStr);
  226.     dataStr[0].Ctransfer("Il grande gueriero muore");
  227.     dataStr[1].Ctransfer("Il grande regista");
  228.     dataStr[2].Ctransfer("1995");
  229.     (**data).DLOGdesc->aggiungiTesto(w1inListaNomi, 3, dataStr);
  230.     dataStr[0].Ctransfer("Il grande gueriero risorge");
  231.     dataStr[1].Ctransfer("Il grande regista");
  232.     dataStr[2].Ctransfer("1995");
  233.     (**data).DLOGdesc->aggiungiTesto(w1inListaNomi, 3, dataStr);
  234.     dataStr[0].Ctransfer("Il grande gueriero combatte");
  235.     dataStr[1].Ctransfer("Il grande regista");
  236.     dataStr[2].Ctransfer("1995");
  237.     (**data).DLOGdesc->aggiungiTesto(w1inListaNomi, 3, dataStr);
  238.     dataStr[0].Ctransfer("Il grande gueriero fugge");
  239.     dataStr[1].Ctransfer("Il grande regista");
  240.     dataStr[2].Ctransfer("1995");
  241.     (**data).DLOGdesc->aggiungiTesto(w1inListaNomi, 3, dataStr);
  242.     dataStr[0].Ctransfer("Il grande gueriero ci ha proprio rotto le ...");
  243.     dataStr[1].Ctransfer("Il grande regista");
  244.     dataStr[2].Ctransfer("1995");
  245.     (**data).DLOGdesc->aggiungiTesto(w1inListaNomi, 3, dataStr);
  246.     dataStr[0].Ctransfer("Il grande gueriero I");
  247.     dataStr[1].Ctransfer("Il grande regista");
  248.     dataStr[2].Ctransfer("1995");
  249.     (**data).DLOGdesc->aggiungiTesto(w1inListaNomi, 3, dataStr);
  250.     dataStr[0].Ctransfer("Il grande gueriero II");
  251.     dataStr[1].Ctransfer("Il grande regista");
  252.     dataStr[2].Ctransfer("1995");
  253.     (**data).DLOGdesc->aggiungiTesto(w1inListaNomi, 3, dataStr);
  254.     dataStr[0].Ctransfer("Il grande gueriero III");
  255.     dataStr[1].Ctransfer("Il grande regista");
  256.     dataStr[2].Ctransfer("1995");
  257.     (**data).DLOGdesc->aggiungiTesto(w1inListaNomi, 3, dataStr);
  258.     return(result);
  259. }
  260.  
  261. /*** Procedura: "disegnaTitoli_LeggiFilm(ptrElTitol)"
  262. *
  263. *    Disegna i dati sulle varie liste
  264. *    Attenzione accede ai dati di DescrTitolo in modo non ortodosso
  265. *    Si suppone che i dati siano Str255 e memorizzati all'inizio della
  266. *    struttura e nella giusta sequenza.
  267. *
  268. *    Par INPUT:    "ptrElTitol" i dati da porre nella lista.
  269. **************************************************************************/
  270. void disegnaTitoli_LeggiFilm(PtrDescrTitolo ptrElTitol)
  271. {
  272.     Cstring_P dataStr[3];
  273.     char *str = NULL;
  274.  
  275.     dataStr[0].Istring_P();
  276.     dataStr[1].Istring_P();
  277.     dataStr[2].Istring_P();
  278.     dataStr[0].Ptransfer(ptrElTitol->titolo);
  279.     dataStr[1].Ptransfer(ptrElTitol->regia);
  280.     dataStr[2].Ptransfer(ptrElTitol->annoProd);
  281.     (**data).DLOGdesc->aggiungiTesto(w1inListaNomi, 3, dataStr);
  282. }
  283.  
  284. /*** Procedura: "ClickInOk()"
  285. *
  286. *    Gestisce il click sul bottone ricerca.
  287. *
  288. *    Val OUTPUT:    true se tutto ok, false altrimenti.
  289. *********************************************************/
  290. int ClickInOk(PtrDescrFilm descrizione)
  291. {
  292.     return(false);
  293. }
  294.  
  295. /*** Procedura: "ClickInTokenItem(&theEvent)"
  296. *
  297. *    Gestisce gli eventi nel campo "input token".
  298. *
  299. *    Par INPUT:    'theEvent' il puntatore al record dell'evento attuale;
  300. ************************************************************************/
  301. void ClickInTokenItem(EventRecord *theEvent)
  302. {
  303. }
  304.  
  305. void ClickInScroll_ListaFilm(EventRecord *theEvent)
  306. {
  307. }
  308.  
  309. /*** Disattiva il testo di input
  310. *
  311. *    Non viene più usata ... (vedi)
  312. *
  313. *    activeTextEdit_ListaFilm,
  314. *    initTextData_ListaFilm.
  315. *
  316. *****************************************/
  317. void disattivaTestoInput(void)
  318. {
  319. }
  320.  
  321. /*** activeField(short itemHit);
  322. *
  323. *    Attiva un textEdit.
  324. *
  325. *    Par INPUT:    'itemHit' l'item del dialog su cui l'utente ha cliccato.
  326. *
  327. ************************************************************************/
  328. void activeTextEdit_ListaFilm(short itemHit)
  329. {
  330. }
  331.  
  332. /*** Procedure: "initTextData_ListaFilm(short itemHit)
  333. *
  334. *    Inizializza i dati relativi ad un text Edit
  335. *
  336. *    Par INPUT:    'itemHit' il numero di item.
  337. ********************************************************/
  338. void initTextData_ListaFilm(short itemHit)
  339. {
  340. }
  341.  
  342. /*** Modifica il cursore
  343. *****************************************/
  344. void MaintainCursor2(Cursor *editCursor)
  345. {
  346. }
  347.  
  348. /*** Procedura: "aggiornaBottoneRicerca(void)"
  349. *
  350. *    Aggiorna il bottone della ricerca.
  351. ************************************************************************/
  352. void aggiornaBottoneRicerca(void)
  353. {
  354. }
  355.  
  356. /*** Procedura: "ClickInListaNomi(EventRecord &theEvent)"
  357. *
  358. *    Gestisce i "mouse Event" nel campo "ListaNomi".
  359. *    L' attivazione/disabilitazione del bottone ok
  360. *    è gestita da questa procedura.
  361. ************************************************************/
  362. void ClickInListaNomi(EventRecord *theEvent)
  363. {
  364. }
  365.  
  366. /*** Incrementa il titoloScelto di "offSet"
  367. *****************************************************/
  368. void incNomeSel(short offSet)
  369. {
  370. }
  371.  
  372. /*** Seleziona l'item richiesto
  373. *
  374. *    Par INPUT:    'titoloScelto' il titolo scelto.
  375. *                Seleziona il titolo supponendo che i dati
  376. *                contenuti nei campi 'titoloAlto' etc siano
  377. *                corretti.
  378. *
  379. *********************************************************/
  380. void selectTitolo(short titoloScelto)
  381. {
  382. }
  383.  
  384. /*** Procedura: "LeggiFilm_updateEvt()"
  385. *
  386. *    Gestisce l'updateEvt nei campi definiti come "user"
  387. *    (inListaNomi, inScrollBar)
  388. **********************************************************/
  389. void LeggiFilm_updateEvt(void)
  390. {
  391.     GrafPtr port;
  392.     DialogPtr theDialog = (*data)->theDialog;
  393.  
  394.     GetPort(&port);
  395.     SetPort((GrafPtr)theDialog);
  396.     BeginUpdate(theDialog);
  397.     (**data).DLOGdesc->updateEvt();
  398.     DrawDialog(theDialog);
  399.     EndUpdate(theDialog);
  400.     SetPort(port);
  401. }
  402.  
  403.  
  404. void        FirstWindowIdle(DialogPtr theDialog)
  405. {
  406.     if (theDialog == (*data)->theDialog)
  407.         (**data).DLOGdesc->idle();
  408. }
  409. /* end FirstWindowIdle */
  410.  
  411. void        FirstWindowCursor(DialogPtr theDialog, Point pt)
  412. {
  413. }
  414. /* end FirstWindowCursor */
  415.  
  416.  
  417. short        FirstWindowKeyDown(DialogPtr theDialog, EventRecord *theEvent)
  418. {
  419.     short        itemHit;
  420.  
  421.     itemHit = (**data).DLOGdesc->gestEvent(theEvent);
  422.     if (itemHit != -1)
  423.         return(itemHit);
  424.     
  425.     if (IsDialogEvent(theEvent))
  426.     {
  427.         short pos;
  428.         Boolean status;
  429.  
  430.         DialogSelect(theEvent, &theDialog, &itemHit);
  431.         (**data).DLOGdesc->itemSelect(theEvent, itemHit, &pos, &status);
  432.         switch(itemHit)
  433.         {
  434.             case w1inListaNomi:
  435.                 break;
  436.             case w1tokenItem:
  437.             case w1ricerca:
  438.             case w1nuovo:
  439.                 return(itemHit);
  440.                 break;
  441.             case w1tipoPopUpItem:
  442.             {
  443.                 if (status)
  444.                 {
  445.                     CGestisciMenu    *popUps;
  446.                     MenuHandle    menuHdl;
  447.                     short        menuID;
  448.                     short        pos;
  449.         
  450.                     popUps = (**data).DLOGdesc->getPopUp(w1tipoPopUpItem);
  451.                     popUps->menuChoiceData(&menuHdl, &menuID, &pos);
  452.                     (**data).DLOGdesc->cancellaTesto(w1secondtokenItem);
  453.                     (**data).DLOGdesc->cancellaTesto(w1tokenItem);
  454.                 }
  455.                 break;
  456.             }
  457.             case ok:
  458.                 return(ok);
  459.                 break;
  460.             case cancel:
  461.                 return(cancel);
  462.                 break;
  463.         }
  464.     }
  465.     return(-1);
  466. }
  467. /* end FirstWindowKeyDown */
  468.